package br.com.localab.equipamento.modelo;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

public class RepositorioEquipamento implements IRepositorioEquipamento, Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Session s;
	
	public RepositorioEquipamento(Session s) {
		this.s = s;
	}
	
	public void cadastrarEquipamento(Equipamento equipamento) throws EquipamentoJaCadastradoException{
		try{
			s.save(equipamento);
		}catch(Exception e){
		  throw	new EquipamentoJaCadastradoException(equipamento.getNome());
		}
	}
	
	public void editarEquipamento(Equipamento equipamento) throws EquipamentoNaoEncontradoException{
		try{
			s.update(equipamento);
		}catch(Exception e){
		  throw	new EquipamentoNaoEncontradoException(equipamento.getNome());
		}
	}
	
	public Equipamento procurar(String matricula) throws EquipamentoNaoEncontradoException{
		Equipamento equipamento;
		try{
			equipamento  = (Equipamento) s.load(Equipamento.class, matricula);
			System.out.println(equipamento.getNome());
		return equipamento;
		}catch(Exception e){
			throw new EquipamentoNaoEncontradoException(matricula);
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Equipamento> listar(){
		return s.createCriteria(Equipamento.class).list();
	}
	
	@SuppressWarnings("unchecked")
	public List<Equipamento> list(String nomeCampo, boolean valorCampo) {
		Criteria c = s.createCriteria(Equipamento.class);
		c.add(Expression.eq(nomeCampo, valorCampo));
		c.setCacheable(false);
		return c.list();
	}
	
	public Equipamento procurar(String nomeCampo, String valorCampo) throws EquipamentoNaoEncontradoException{
		try{
		Criteria c = s.createCriteria(Equipamento.class);
		c.add(Expression.eq(nomeCampo, valorCampo));
		c.setCacheable(true);
		Equipamento equipamento = (Equipamento) c.uniqueResult();
		System.out.println(equipamento.getNome());
		return equipamento;
		}catch(Exception e){
			throw new EquipamentoNaoEncontradoException(valorCampo);
		}
	}

	@Override
	public Equipamento procurar(Long id)throws EquipamentoNaoEncontradoException{
	Equipamento equipamento;
	try{
		equipamento  = (Equipamento) s.load(Equipamento.class, id);
		System.out.println(equipamento.getNome());
	return equipamento;
	}catch(Exception e){
		String nome = id+"";
		throw new EquipamentoNaoEncontradoException(nome);
	}
	}
	
}
